/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package FACTURAS;

import CONTROLES.Conexion;
import UTILITARIOS.Fecha;
import UTILITARIOS.StringToDate;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * @author VICENTE
 */
public class ControlFacturaCompra {

    public int registrarFacturaCompra(FacturaCompra factura){
        Conexion conection = new Conexion();        
        try{
          Connection conectado = conection.getConexion();          
          PreparedStatement psc = conectado.prepareStatement("INSERT INTO factura_compra(nit, razon_social, num_factura, num_autorizacion, ice, exento, importe, fecha, id_sucursal, codigo_control) VALUES ('"+factura.getNitCliente()+"','"+factura.getCliente()+"','"+factura.getNumFactura()+"','"+factura.getNumAutorizacion()+"','"+factura.getIce()+"','"+factura.getExento()+"','"+factura.getMonto()+"','"+factura.getFecha()+"','"+factura.getIdSucursal()+"','"+factura.getCodigoControl()+"');");
          psc.executeUpdate();
          psc.close();

        }catch (SQLException em) {
            System.out.println("error al Registrar la Factura en la base de datos"+em.getLocalizedMessage() );
            return 0;
        }
            return 1;
    }

    public ArrayList<FacturaCompra> getFacturasCompraMes(int idSucursal, Date fechaInicio, Date fechaFin) {

        Conexion conection = new Conexion();
        ArrayList<FacturaCompra> facturas = new ArrayList<FacturaCompra>();
        FacturaCompra f;
        try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("select * from factura_compra where id_sucursal = '"+idSucursal+"' AND fecha >= '"+fechaInicio+"' AND fecha < '"+fechaFin+"'  ORDER BY fecha ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                f= new FacturaCompra();
                f.setIdFacturaCompra(respEmp.getInt(1));
                f.setNitCliente(respEmp.getString(2));
                f.setCliente(respEmp.getString(3));
                f.setNumFactura(respEmp.getString(4));
                f.setNumAutorizacion(respEmp.getString(5));
                f.setIce(respEmp.getDouble(6));
                f.setExento(respEmp.getDouble(7));
                f.setMonto(respEmp.getDouble(8));
                f.setFecha(respEmp.getDate(9));
                f.setIdSucursal(respEmp.getInt(10));
                f.setCodigoControl(respEmp.getString(11));
                facturas.add(f);
            }
        }catch (SQLException e){
            System.out.println("error al recuperar lista de Facturas de compras " + e.getLocalizedMessage());
        }
        return facturas;
    }

    public double getTotalFacturasCompra(int idSucursal, Date fecha) {
        Conexion conection = new Conexion();
       double total = 0.0;
       try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("SELECT sum(importe) AS importe, sum(ice) AS ice, sum(exento) AS excento  FROM factura_compra WHERE fecha = '"+fecha+"' AND id_sucursal = '"+idSucursal+"' ");
            ResultSet respEmp = psc.executeQuery();
            if(respEmp.next()){
                total = respEmp.getDouble(1)+respEmp.getDouble(2)+respEmp.getDouble(3);
            }
        }catch (SQLException e){
            System.out.println("error al recuperar el total de las Facturas de Compra " + e.getLocalizedMessage());
        }
        return total;
    }

   public int actualizarFacturaCompra(FacturaCompra fac) {
         Conexion conection = new Conexion();
        
        try {
            Connection conectado = conection.getConexion();
            PreparedStatement ps =
            conectado.prepareStatement("UPDATE factura_compra SET nit='"+fac.getNitCliente()+"',razon_social='"+fac.getCliente()+"',num_factura='"+fac.getNumFactura()+"',num_autorizacion='"+fac.getNumAutorizacion()+"',ice='"+fac.getIce()+"',exento='"+fac.getExento()+"',importe='"+fac.getMonto()+"',fecha='"+fac.getFecha()+"',id_sucursal='"+fac.getIdSucursal()+"',codigo_control='"+fac.getCodigoControl()+"' WHERE num_factura = '"+fac.getNumFactura()+"';");
            ps.executeUpdate();
            ps.close();
    } catch (SQLException em) {
        System.out.println("error al actualizar al factura "+em.getLocalizedMessage() );
        return 0;
            
    }
         return 1;
    }

    public FacturaCompra dameFacturaCompra(String x) {
        Conexion conection = new Conexion();
        FacturaCompra factura = new FacturaCompra();
    try {
            Connection conectado = conection.getConexion();
            PreparedStatement psA = conectado.prepareStatement("select * from factura_compra where num_factura ='"+x+"'");
            ResultSet respA = psA.executeQuery();
            if(respA.next()){
                factura.setIdFacturaCompra(respA.getInt(1));
                factura.setNitCliente(respA.getString(2));
                factura.setCliente(respA.getString(3));
                factura.setNumFactura(respA.getString(4));
                factura.setNumAutorizacion(respA.getString(5));
                factura.setIce(respA.getDouble(6));
                factura.setExento(respA.getDouble(7));
                factura.setMonto(respA.getDouble(8));
                factura.setFecha(respA.getDate(9));
                factura.setIdSucursal(respA.getInt(10));
                factura.setCodigoControl(respA.getString(11));
                


            }

        } catch (SQLException ex) {
            System.out.println("Error buscar facuta por su numero : "+ex.getLocalizedMessage());
        }
    return factura;
    }
}
